package com.hzncc.flowable_diboot.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.experimental.Accessors;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

@Data
@Accessors(chain = true)
@JsonIgnoreProperties(ignoreUnknown = true)
public class OaSync {

    /**
     * 唯一标识
     */
    private String id;

    /**
     * 标示该值可以作为数据存储的主键
     */
    private String lunid;

    /**
     * 名称
     */
    private String name;

    /**
     * 组织架构类型, org(机构), dept(部门), group(群组), post(岗位), person(人员)
     */
    private String type;

    /**
     * 编号
     */
    private String no;

    /**
     * 排序号
     */
    private String order;

    /**
     * 关键字
     */
    private String keyword;

    /**
     * 组织架构说明
     */
    private String memo;

    /**
     * 是否有效, 该属性决定该组织架构是否删除
     */
    private Boolean isAvailable;

    /**
     * 父部门, 仅当 type 为 org, dept, post, person 时, 有此信息
     */
    private String parent;

    /**
     * 部门领导, 仅当 type 为 org, dept, post 时, 有此信息
     */
    private String thisLeader;

    /**
     * 上级领导, 仅当 type 为 org, dept 时, 有此信息
     */
    private String superLeader;

    /**
     * 成员, 仅当 type 为 group 时, 有此信息
     */
    private List<String> members;

    /**
     * 包含人员, 仅当 type 为 post 时, 有此信息
     */
    private List<String> persons;

    /**
     * 所属岗位, 仅当 type 为 person 时, 有此信息
     */
    private List<String> posts;

    /**
     * 登录名, 仅当 type 为 person 时, 有此信息
     */
    private String loginName;

    /**
     * 密码, base64 加密后的信息, 仅当 type 为 person 时, 有此信息
     */
    private String password;

    /**
     * 手机号, 仅当 type 为 person 时, 有此信息
     */
    private String mobileNo;

    /**
     * 邮件地址, 仅当 type 为 person 时, 有此信息
     */
    private String email;

    /**
     * 考勤号, 仅当 type 为 person 时, 有此信息
     */
    private String attendanceCardNumber;

    /**
     * 办公电话, 仅当 type 为 person 时, 有此信息
     */
    private String workPhone;

    /**
     * rtx 账号, 仅当 type 为 person 时, 有此信息
     */
    private String rtx;

    /**
     * 微信账号, 仅当 type 为 person 时, 有此信息
     */
    private String wechat;

    /**
     * 性别，M 表示男性，F 表示女性, 仅当 type 为 person 时, 有此信息
     */
    private String sex;

    /**
     * 短号, 仅当 type 为 person 时, 有此信息
     */
    private String shortNo;

    /**
     * 职级名称，仅当 type 为 person 时, 有此信息
     */
    private String staffingLevelName;

    /**
     * 职级大小，仅当 type 为 person 时, 有此信息
     */
    private String staffingLevelValue;

    /**
     * 自定义属性，仅当 type 为 person 时, 有此信息，值为 json 格式，key 值为定义的属性名称，value 值都为字符串格式
     */
    private CustomProps customProps;

    @Data
    public static class CustomProps {

        private LocalDate birthDate;

        private String education;

        private Boolean socialRecruitment;

    }

}
